package com.pasche;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class ServicioAdapter extends Adapter {
	
	public void agregarServicio(Servicio serv) throws Exception{
		Connection conn = null;
		try {
			conn = abrirConexion();
    	
	    	Statement statement;
			
			statement = conn.createStatement();
			String add ="INSERT into servicios (nombre, id_servicio) " +
					"VALUES ('"+serv.getNombreServicio()+"', "+serv.getIdServicio()+")";
			statement.executeUpdate(add);
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
		finally{
			cerrarConexion(conn);
		}
	}
    
    public void eliminarServicio(Servicio serv) throws Exception{
    	Connection conn = null;
    	try {
    		conn = abrirConexion();
		
			Statement statement = conn.createStatement();
			String del ="DELETE from servicios WHERE nombre = '"+serv.getNombreServicio()+"'";
			statement.executeUpdate(del);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    }
    
    public void modificarNombre(Servicio serv, String newNombServ) throws Exception{
    	Connection conn = null;
    	try {
    		conn = abrirConexion();
    	
			Statement statement = conn.createStatement();
			String upd ="UPDATE servicios SET nombre = '"+newNombServ+"' WHERE nombre = '"+serv.getNombreServicio()+"'";
			statement.executeUpdate(upd);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    }
    
    public Servicio devolverServicio(String nomServicio) throws Exception{
    	Connection conn = null;
    	Servicio s = null;
    	try {
    		conn = abrirConexion();
    		Statement statement = conn.createStatement();
    		String sel ="SELECT nombre as serv, id_servicio as id from servicios WHERE nombre = '"+nomServicio+"'";
    		ResultSet result = statement.executeQuery(sel);
    		if(result.next()){
    			String serv = result.getString("serv");
    			Integer id = result.getInt("id");
    			s = new Servicio(serv, id);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    	return s;
     }
    
     public Servicio devolverServicio(Integer IdServicio) throws Exception{
    	Connection conn = null;
    	Servicio s = null;
    	try {
    		conn = abrirConexion();
    		Statement statement = conn.createStatement();
    		String sel ="SELECT nombre as serv, id_servicio as id from servicios WHERE id_servicio = '"+IdServicio+"'";
    		ResultSet result = statement.executeQuery(sel);
    		if(result.next()){
    			String serv = result.getString("serv");
    			Integer id = result.getInt("id");
    			s = new Servicio(serv, id);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    	return s;
     }
    
    public List<Servicio> devolverTodos() throws Exception{
    	Connection conn = null;
    	List<Servicio> servicios= new ArrayList<Servicio>();
		try {
			conn = abrirConexion();
    		Statement statement = conn.createStatement();
    		String sel ="SELECT nombre as serv, id_servicio as id from servicios";
    		ResultSet result = statement.executeQuery(sel);
    		while(result.next()){
    			String serv = result.getString("serv");
    			Integer id = result.getInt("id");
    			Servicio  s = new Servicio(serv, id);
    			servicios.add(s);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    	return servicios;
     }
    
    public List<Servicio> devolverServiciosUsuario(String username) throws Exception{
    	Connection conn = null;
    	List<Servicio> servicios = new ArrayList<Servicio>();
    	try {
    		conn = abrirConexion();
        	UsuarioAdapter usu = new UsuarioAdapter();
        	Usuario usuario = usu.devolverUsuario(username);
        	String sel ="SELECT id_servicio as id from servicios_usuarios WHERE id_usuario = "+usuario.getId();
    		Statement statement=conn.createStatement();
			ResultSet result = statement.executeQuery(sel);
			while(result.next()){
				Integer id = result.getInt("id");
				Servicio s = devolverServicio(id);
				servicios.add(s);
			}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    	return servicios;
    }

}
